import { defineStore } from 'pinia'
import { getUserInfo } from '@/apis/user.js'
import { useData } from 'element-plus/es/components/table-v2/src/composables/use-data.mjs'

export const useUserStore = defineStore('user', {
  state: () => ({
    // 用户类型映射（对应SQL表中的userType）
    // 1-普通用户 2-企业用户 3-平台管理员
    userTypeMap: {
      1: 'user',      // 普通用户
      2: 'enterprise', // 企业用户
      3: 'platform'   // 平台管理员
    },
    // 用户信息
    userInfo: {
      isLoggedIn: false,
      userId: null,
      username: '',
      userType: null, // 数字类型：1/2/3
      realName: '', // 真实姓名（仅对普通用户有效）
      userTypeText: null, // 文本类型：user/enterprise/platform
      enterpriseId: null, // 企业ID（仅对企业用户有效）
    },
    // 加载状态
    loading: false
  }),

  getters: {
    // 获取用户类型文本
    getUserTypeText: (state) => {
      if (!state.userInfo.userType) return null
      return state.userTypeMap[state.userInfo.userType]
    },
    
    // 检查是否是管理员
    isAdmin: (state) => {
      return state.userInfo.userType === 3
    },
    
    // 检查是否是企业用户
    isEnterprise: (state) => {
      return state.userInfo.userType === 2
    },
    
    // 检查是否是普通用户
    isUser: (state) => {
      return state.userInfo.userType === 1
    }
  },

  actions: {
    // 设置用户信息
    setUserInfo(info) {
      // 处理info可能是嵌套对象的情况
      const userData = info.userInfo || info;
      // 获取userType（只使用小驼峰命名）
      const userType = userData.userType;
      
      this.userInfo = {
        isLoggedIn: true,
        userId: userData.id,
        username: userData.username,
        realName: userData.realName || '',
        userType: userType,
        userTypeText: this.userTypeMap[userType],
        enterpriseId: userData.enterpriseId || null,
      }
      // 保存到localStorage
      localStorage.setItem('userInfo', JSON.stringify(this.userInfo))
    },
    
    // 清除用户信息
    clearUserInfo() {
      this.userInfo = {
        isLoggedIn: false,
        userId: null,
        username: '',
        realName: '',
        userType: null,
        userTypeText: null,
        enterpriseId: null,
      }
      localStorage.removeItem('userInfo')
      localStorage.removeItem('token')
    },
    
    // 从localStorage恢复用户信息
    recoverUserInfo() {
      try {
        const userInfo = localStorage.getItem('userInfo')
        if (userInfo) {
          this.userInfo = JSON.parse(userInfo)
        }
      } catch (error) {
        console.error('恢复用户信息失败:', error)
        this.clearUserInfo()
      }
    },
    
    // 异步获取用户信息
    async fetchUserInfo() {
      this.loading = true
      try {
        const response = await getUserInfo()
        if (response.code === 200 && response.data) {
          this.setUserInfo(response.data)
          return response.data
        }
      } catch (error) {
        console.error('获取用户信息失败:', error)
        this.clearUserInfo()
      } finally {
        this.loading = false
      }
    },
    
    // 检查用户权限
    checkPermission(requiredUserTypes) {
      // 如果未登录，无权限
      if (!this.userInfo.isLoggedIn) {
        return false
      }
      
      // 如果传入的是数组，检查是否包含当前用户类型
      if (Array.isArray(requiredUserTypes)) {
        return requiredUserTypes.includes(this.userInfo.userType)
      }
      
      // 如果传入的是单个值，检查是否匹配
      return this.userInfo.userType === requiredUserTypes
    }
  }
})